#define DEBUG
#include <cstdio>
#define MAXN 200000
#define MAXK 10000000

using namespace std;

class TreeArray {
public:
  int a[MAXN+1];
  
  int lowbit(int k) {
    return k&(-k);
  }

  void add(int v, int o) {
    for (; o<=MAXN; o+=lowbit(o)) {
      a[o]+=v;
    }
  }

  int get(int o) {
    int ret=0;
    for (; o>0; o-=lowbit(o)) {
      ret += a[o];
    }
    return ret;
  }
};

void mySort(int a[][3], int l, int r) {
  int i=l, j=r, mid=a[(l+r)/2][0], temp;
  for (; i<=j; ) {
    for (; a[j][0]<mid; j--);
    for (; a[i][0]>mid; i++);
    if (i<=j) {
      temp=a[i][0], a[i][0]=a[j][0], a[j][0]=temp;
      temp=a[i][1], a[i][1]=a[j][1], a[j][1]=temp;
      temp=a[i][2], a[i][2]=a[j][2], a[j][2]=temp;
      i++, j--;
    }
  }
  if (i<r) {
    mySort(a, i, r);
  }
  if (j>l) {
    mySort(a, l, j);
  }
}

int main() {
#ifdef DEBUG
  freopen("4792.in", "r", stdin);
  freopen("4792.out", "w", stdout);
#endif

  static TreeArray ta;
  static int a[MAXN+1], map[MAXN+1], set[MAXK+1][3], get[MAXK+1][3], ans[MAXN+1];
  int n, m;
  scanf("%d %d", &n, &m);
  for (int i=1; i<=n; i++) {
    scanf("%d", a+i);
    map[a[i]]=i;
  }
  for (int i=1; i<=n; i++) {
    for (int j=1; a[i]*j<=n; j++) {
      if (i<=map[a[i]*j]) {
	set[++set[0][0]][0]=i;
	set[set[0][0]][1]=map[a[i]*j];
      } else {
	set[++set[0][0]][0]=map[a[i]*j];
	set[set[0][0]][1]=i;
      }
    }
  }
  mySort(set, 1, set[0][0]);

  for (int i=1; i<=m; i++) {
    scanf("%d %d", get[i], get[i]+1);
    get[i][2]=i;
  }
  mySort(get, 1, m);

  for (int i=1, j=1; i<=m; i++) {
    for (; j<=set[0][0] && set[j][0]>=get[i][0]; j++) {
      ta.add(1, set[j][1]);
    }
    ans[get[i][2]] = ta.get(get[i][1]);
  }

  for (int i=1; i<=m; i++) {
    printf("%d\n", ans[i]);
  }

  fclose(stdin);
  fclose(stdout);
  return 0;
}
